class opt_feat
{
public:  
    inline opt_feat(const std::string  in_path, 
		    const std::string  in_actionNames, 
		    const std::string  in_feat_path,
		    const int in_col, 
		    const int in_row);
    
    inline void features_per_action_training();
    inline void create_gmm_action( int in_Ncent );
    inline void feature_testing( );
    inline void gmm_testing( int in_Ncent );
    
    inline void feature_multi_action( std::string path_multi );
    inline void gmm_multi_action( int in_Ncent );

    
   
    

    
double THRESH;
double THRESH_2;

const std::string path;
const std::string actionNames;
const std::string feat_path;

const int row;
const int col;

const int n_samples_tr; //# samples training
const int n_samples_te; //# samples testing

int  N_cent;
bool ismultiAction;
rowvec  arma_multi_labels;
field <mat> featuresframe_video_i; // Each mat has all the vector features of that frame


//std::vector < vec > feat_video_i; not used
std::vector < vec > feat_all_videos_action_i;
uvec lab_feature_vectors;
//std::vector < mat > diag_covs_all_videos;


field<std::string> actions;
field<std::string> videos;


  private:
    inline void features_per_action();
    inline void gmm_per_action();
    inline void feature_video(std::string one_video);
    inline vec  get_loglikelihoods(mat mat_features);

 
  
};